Mestre kunsten å opprette Pandas DataFrames. Denne guiden dekker initialisering av DataFrames fra ordbøker, lister, NumPy-matriser og mer for globale dataeksperter.
Opprettelse av Pandas DataFrame: En dypdykk i datastrukturinitialisering
Velkommen til verden av datamanipulasjon med Python! Kjernen i nesten alle dataanalyser er Pandas-biblioteket, og hjørnesteinen er DataFrame. Tenk på en DataFrame som en smart, kraftig og fleksibel versjon av et regneark eller en databasetabell, som finnes rett i Python-miljøet ditt. Det er det viktigste verktøyet for å rense, transformere, analysere og visualisere data. Men før du kan utføre noen av disse datatrylleriene, må du først mestre kunsten å lage en DataFrame. Hvordan du initialiserer denne grunnleggende datastrukturen kan legge grunnlaget for hele analysen din.
Denne omfattende guiden er designet for et globalt publikum av ambisiøse og praktiserende dataanalytikere, forskere og ingeniører. Vi vil utforske de vanligste og kraftigste metodene for å lage Pandas DataFrames fra bunnen av. Enten dataene dine er i en ordbok, en liste, en NumPy-matrise eller et annet format, vil denne artikkelen gi deg kunnskapen og praktiske eksempler for å initialisere dine DataFrames med selvtillit og effektivitet. La oss bygge vårt fundament.
Hva er egentlig en Pandas DataFrame?
Før vi begynner å bygge, la oss klargjøre hva vi konstruerer. En Pandas DataFrame er en todimensjonal, størrelsesmutabel og potensielt heterogen tabellstruktur. La oss bryte det ned:
- Todimensjonal: Den har rader og kolonner, akkurat som et regneark.
- Størrelsesmutabel: Du kan legge til eller fjerne rader og kolonner etter at DataFrame er opprettet.
- Heterogen: Kolonnene kan ha forskjellige datatyper. For eksempel kan en kolonne inneholde tall (heltall eller flyttall), en annen kan inneholde tekst (strenger), og en tredje kan inneholde datoer eller boolske verdier (True/False).
En DataFrame har tre hovedkomponenter:
- Dataene: De faktiske verdiene som holdes i strukturen, organisert i rader og kolonner.
- Indeksen: Etikettene for radene. Hvis du ikke oppgir en indeks, oppretter Pandas en standardindeks som starter fra 0. Indeksen gir en kraftig måte å få tilgang til og justere data.
- Kolonnene: Etikettene for kolonnene. Disse er avgjørende for å få tilgang til spesifikke dataserier i DataFrame.
Å forstå denne strukturen er nøkkelen til å forstå hvordan du oppretter og manipulerer DataFrames effektivt.
Fundamentet: Importere Pandas
Først og fremst. For å bruke Pandas, må du importere biblioteket til Python-skriptet eller notatboken din. Den universelt aksepterte konvensjonen, fulgt av fagfolk over hele verden, er å importere det med aliaset pd. Dette enkle aliaset gjør koden din mer lesbar og konsis.
import pandas as pd
import numpy as np # Ofte brukt sammen med Pandas, så vi importerer det også.
Med denne ene linjen har du låst opp hele kraften i Pandas-biblioteket. La oss nå komme til kjernen i denne guiden: opprette DataFrames.
Kjerneopprettelsesmetoder: Fra enkelt til komplekst
pd.DataFrame()-konstruktøren er utrolig allsidig. Den kan akseptere mange forskjellige typer input. Vi vil nå utforske de viktigste metodene, og bevege oss fra de vanligste til mer spesialiserte tilfeller.
1. Opprette en DataFrame fra en ordbok med lister eller matriser
Dette er uten tvil den vanligste og mest intuitive metoden for å opprette en DataFrame. Du starter med en Python-ordbok der nøklene blir kolonnenavnene, og verdiene blir lister (eller NumPy-matriser eller Pandas Series) som inneholder dataene for hver kolonne.
Slik fungerer det: Pandas kartlegger hver ordboknøkkel til en kolonneoverskrift og hver liste med verdier til radene i den kolonnen. Et kritisk krav her er at alle listene må ha samme lengde, ettersom hver liste representerer en hel kolonne med data.
Eksempel:
La oss lage en DataFrame som inneholder informasjon om forskjellige byer rundt om i verden.
# Data organisert etter kolonne
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Opprett DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Output:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 São Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
Viktig poeng: Denne metoden er perfekt når dataene dine er naturlig organisert etter funksjon eller kategori. Den er ren, lesbar og oversetter direkte strukturen i ordboken din til et tabellformat.
2. Opprette en DataFrame fra en liste over ordbøker
En alternativ og like kraftig metode er å bruke en liste der hvert element er en ordbok. I denne strukturen representerer hver ordbok en enkelt rad, og nøklene representerer kolonnenavnene for den radens data.
Slik fungerer det: Pandas itererer gjennom listen. For hver ordbok oppretter den en ny rad. Ordboknøklene brukes til å bestemme kolonnene. Denne metoden er utrolig fleksibel fordi hvis en ordbok mangler en nøkkel, vil Pandas automatisk fylle den cellen i den tilsvarende raden med NaN (Not a Number), som er standardmarkøren for manglende data i Pandas.
Eksempel:
La oss representere de samme bydataene, men denne gangen strukturert som en liste over poster.
# Data organisert etter rad (post)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'São Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Legg merke til den forskjellige strukturen
]
# Opprett DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Output:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 São Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Legg merke til hvordan Pandas håndterte inkonsekvensene elegant. 'Is_Coastal'-verdien for Shanghai er NaN fordi den manglet fra ordboken. En ny 'Timezone'-kolonne ble opprettet for Kairo, med NaN for alle andre byer. Dette gjør det til et utmerket valg for å jobbe med semi-strukturerte data, for eksempel JSON-svar fra APIer.
Viktig poeng: Bruk denne metoden når dataene dine kommer inn som en serie poster eller observasjoner. Den er robust i håndteringen av manglende data og variasjoner i poststrukturen.
3. Opprette en DataFrame fra en NumPy-matrise
For de som jobber med vitenskapelig databehandling, maskinlæring eller et hvilket som helst felt som involverer tunge numeriske operasjoner, har dataene ofte sin opprinnelse i NumPy-matriser. Pandas er bygget oppå NumPy, noe som gjør integrasjonen mellom de to sømløs og svært effektiv.
Slik fungerer det: Du sender en 2D NumPy-matrise til pd.DataFrame()-konstruktøren. Som standard vil Pandas opprette heltallsbaserte indekser og kolonner. Du kan imidlertid (og bør) gi meningsfulle etiketter ved hjelp av index- og columns-parameterne.
Eksempel:
La oss opprette en DataFrame fra en tilfeldig generert 5x4 NumPy-matrise, som representerer sensoravlesninger over tid.
# Opprett en 5x4 NumPy-matrise med tilfeldige data
data_np = np.random.rand(5, 4)
# Definer kolonne- og indeksetiketter
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# Opprett DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Output (dine tilfeldige tall vil variere):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
I dette eksemplet introduserte vi også en kraftig funksjon: å bruke en DatetimeIndex for tidsseriedata, som låser opp et stort utvalg av tidsbaserte analysefunksjoner i Pandas.
Viktig poeng: Dette er den mest minneeffektive metoden for å opprette en DataFrame fra homogene numeriske data. Det er standardvalget når du grensesnitt med biblioteker som NumPy, Scikit-learn eller TensorFlow.
4. Opprette en DataFrame fra en liste over lister
Denne metoden er konseptuelt lik å opprette fra en NumPy-matrise, men bruker standard Python-lister. Det er en grei måte å konvertere tabellformede data lagret i et nestet listeformat.
Slik fungerer det: Du gir en liste der hver indre liste representerer en rad med data. Som med NumPy-matriser, anbefales det sterkt å spesifisere kolonnenavnene via columns-parameteren for klarhet.
Eksempel:
# Data som en liste over rader
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Definer kolonnenavn
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Opprett DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Output:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Viktig poeng: Dette er en enkel og effektiv metode for når dataene dine allerede er strukturert som en liste over rader, for eksempel når du leser fra et filformat som ikke har overskrifter.
Avansert initialisering: Tilpasse din DataFrame
I tillegg til å gi rådataene, tilbyr pd.DataFrame()-konstruktøren flere parametere for å kontrollere strukturen og egenskapene til din nye DataFrame fra det øyeblikket den opprettes.
Spesifisere indeksen
Vi har allerede sett index-parameteren i aksjon. Indeksen er en avgjørende del av DataFrame, og gir etiketter for radene som brukes for raske oppslag, datajustering og mer. Mens Pandas gir en standard numerisk indeks (0, 1, 2, ...), kan det å sette en meningsfull indeks gjøre dataene dine mye lettere å jobbe med.
Eksempel: La oss gjenbruke vårt ordbok-med-lister-eksempel, men sett City-kolonnen som indeksen ved opprettelse.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai']
# Opprett DataFrame med en tilpasset indeks
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Output:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
São Paulo Brazil 22.4 False
Mumbai India 20.9 True
Nå kan du få tilgang til rad data ved hjelp av disse meningsfulle etikettene, for eksempel med df_with_index.loc['Tokyo'].
Kontrollere datatyper (`dtype`)
Pandas er ganske god til å utlede datatyper (f.eks. gjenkjenne tall, tekst og boolske verdier). Noen ganger må du imidlertid håndheve en spesifikk datatype for en kolonne for å sikre minneeffektivitet eller aktivere spesifikke operasjoner. dtype-parameteren gir deg denne kontrollen.
Eksempel: Tenk deg at vi har produkt-IDer som ser ut som tall, men som bør behandles som tekst (strenger).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Opprett DataFrame mens du spesifiserer en dtype for 'ProductID'
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Output:
ProductID object Stock int32 dtype: object
Legg merke til at str i Pandas er representert som object. Ved eksplisitt å sette dtype, hindrer vi Pandas fra å behandle ProductID som et tall, noe som kan føre til feil beregninger eller sorteringsproblemer senere. Å bruke mer spesifikke heltallstyper som int32 i stedet for standard int64 kan også spare betydelig minne med store datasett.
Praktiske scenarier og beste praksis
Å velge riktig opprettelsesmetode avhenger av det opprinnelige formatet på dataene dine. Her er en enkel beslutningsguide:
- Er dataene dine i kolonner (f.eks. en liste per funksjon)? Bruk en ordbok med lister. Det er en naturlig match.
- Er dataene dine en serie poster (f.eks. fra et JSON API)? Bruk en liste over ordbøker. Den utmerker seg i å håndtere manglende eller ekstra felt i poster.
- Er dataene dine numeriske og i et rutenett (f.eks. fra en vitenskapelig beregning)? Bruk en NumPy-matrise. Det er det mest ytelsesdyktige alternativet for dette bruksområdet.
- Er dataene dine i et enkelt rad-for-rad-tabellformat uten overskrifter? Bruk en liste over lister og oppgi kolonnenavnene separat.
Vanlige fallgruver å unngå
- Ulike lengder i ordbok med lister: Dette er en vanlig feil. Når du oppretter en DataFrame fra en ordbok med lister, må hver liste ha nøyaktig samme antall elementer. Hvis ikke, vil Pandas heve en
ValueError. Sørg alltid for at kolonnedataene dine er av lik lengde før opprettelse. - Ignorere indeksen: Å stole på standard 0-basert indeks er greit i mange tilfeller, men hvis dataene dine har en naturlig identifikator (som en produkt-ID, bruker-ID eller et spesifikt tidsstempel), kan det å sette den som indeksen fra starten av forenkle koden din senere.
- Glemme datatyper: Å la Pandas utlede typer fungerer mesteparten av tiden, men for store datasett eller kolonner med blandede typer, kan ytelsen lide. Vær proaktiv med å sette
dtypefor kolonner som må behandles som kategorier, strenger eller spesifikke numeriske typer for å spare minne og forhindre feil.
Utover initialisering: Opprette DataFrames fra filer
Selv om denne guiden fokuserer på å opprette DataFrames fra Python-objekter i minnet, er det viktig å vite at i de fleste virkelige scenarier vil dataene dine komme fra en ekstern fil. Pandas tilbyr en pakke med svært optimaliserte leserfunksjoner for dette formålet, inkludert:
pd.read_csv(): For kommaseparerte verdifiler, arbeidshesten for dataimport.pd.read_excel(): For å lese data fra Microsoft Excel-regneark.pd.read_json(): For å lese data fra JSON-filer eller strenger.pd.read_sql(): For å lese resultatene av en databaseforespørsel direkte inn i en DataFrame.pd.read_parquet(): For å lese fra det effektive, kolonneorienterte Parquet-filformatet.
Disse funksjonene er det neste logiske trinnet i din Pandas-reise. Å mestre dem vil tillate deg å hente data fra praktisk talt hvilken som helst kilde inn i en kraftig DataFrame-struktur.
Konklusjon: Ditt fundament for datamestring
Pandas DataFrame er den sentrale datastrukturen for ethvert seriøst dataarbeid i Python. Som vi har sett, tilbyr Pandas et fleksibelt og intuitivt sett med verktøy for å initialisere disse strukturene fra et bredt spekter av formater. Ved å forstå hvordan du oppretter en DataFrame fra ordbøker, lister og NumPy-matriser, har du bygget et solid fundament for dataanalyseprosjektene dine.
Nøkkelen er å velge metoden som best samsvarer med den opprinnelige strukturen til dataene dine. Dette gjør ikke bare koden din renere og mer lesbar, men også mer effektiv. Herfra er du klar til å gå videre til de spennende oppgavene med datarensing, utforsking, transformasjon og visualisering. God koding!